【压测】wrk2

在针对服务接口做评估,往往需要考察这个接口的吞吐量、响应时长等,为了测试服务的接收上限,会在正式上线前对服务进行压力测试,目前业界常用的压测工具有loadrunner、jmeter、tcpcopy等。

其中wrk2是相对简单的基于lua的http基准测试工具,其可以在单个多核cpu(多线程)上产生大量的负载,通过产生恒定的吞吐量负载,来反映统计读物的延迟细节

lua是一种轻量的脚本语言,主要是为了嵌入程序中为应用程序提供灵活的拓展和定制功能

测试执行网站可用:https://www.runoob.com/try/runcode.php?filename=HelloWorld&type=lua

之所以初学者使用wrk2作为压测的入门工具:

  1. 无需硬件监控
  2. 测试请求相对比较简单

参考:https://zhaox.github.io/benchmark/2016/12/28/wrk-guidelines

安装

git clone https://github.com/giltene/wrk2.git
cd wrk2/
make    # 即可安装wrk在相应目录下

压测

参数介绍

wrk

  • -c 总http并发数
  • -d 持续压测时间
  • -t 总线程数
  • -R 每秒多少个请求数

请求类型

  • post请求:向服务器端发送请求,从而新增内容
  • get请求:向服务器发送获取数据的请求,不会改变内容
  • put请求:向服务器端发送请求,从而修改内容
  • delete请求:删除内容

详情参考:https://juejin.im/post/5c0e610be51d45707261b10a

目前业内最普遍的请求就是post请求

压测类型

  • post方法压力检测
  • DDCC压力测试
  • 登录压力测试
  • 发送json压力测试
# 当发送请求是json串时
wrk.method = "POST"    #一定要大写
wrk.body = "{\"result_hdfs\":\"/sample_data/train_data_"..math.random(0,2).."\",\"team\":"..math.random(1,20).."}"
wrk.headers["Content-Type"] = "application/json"

执行:

$wrk_path/wrk -t2 --latency -c20 -d10s -R50 --script=post.lua http://10.41.20.196:8140
# 开启2个线程,每个线程发送20个请求,持续发送10s,频率为50次

结果说明:

  • latency:响应时长分布
  • req/sec:每秒处理请求数
  • 连接超时数目timeout

报错

  • invalid HTTP method at 1:1 原因:在提交post需求时,wrk.method错误 解决:wrk.method = "POST"
  • RuntimeError: can't start new thread 原因:多线程处理时,文件未处理完造成资源占据 解决:
  • Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread 原因: 解决:

results matching ""

    No results matching ""